package sf.j2tree.tree;

/**
 * Created by ping on 2017-09-12.
 */
public interface Tree<T extends Comparable> {
    /***
     * 是否为空树
     * @return
     */
    boolean isEmpty();

    /***
     * 树的高度
     * @return
     */
    int height();

    /***
     * 节点个数
     * @return
     */
    int size();

    /**
     * 先根次序遍历
     */
    String preOrder();

    /**
     * 中根次序遍历
     */
    String inOrder();

    /**
     * 后根次序遍历
     */
    String postOrder();

    /**
     * 层次遍历
     */
    String levelOrder();

    /***
     * 插入节点
     * @param t
     */
    void insert(T t);

    /***
     * 删除节点
     * @param t
     */
    void remove(T t);

    /**
     * 查找最大值
     * @return
     */
    T findMin();

    /**
     * 查找最小值
     * @return
     */
    T findMax();

    /***
     * 查找节点
     * @param t
     * @return
     */
    BinaryNode findNode(T t);

    /**
     * 是否包含某个值
     * @param data
     * @return
     */
    boolean contains(T data) throws Exception;

    /**
     * 清空
     */
    void clear();
}
